package facturacion;

public class control_existencias 
{
     private Sentencias_sql sen;
     private String Documento;
     private String numero_factura="";

    public String getNumero_factura() {
        return numero_factura;
    }

    public void setNumero_factura(String numero_factura) {
        this.numero_factura = numero_factura;
    }

    public String getId_cliente() {
        return Documento;
    }

    public void setId_cliente(String id_cliente) {
        this.Documento = Documento;
    }
     private String No_documento;

    public String getId_proveedor() {
        return No_documento;
    }

    public void setId_proveedor(String id_proveedor) {
        this.No_documento = No_documento;
    }

    public String getId_articulo() {
        return cod_articulo;
    }

    public void setId_articulo(String cod_articulo) {
        this.cod_articulo = cod_articulo;
    }
     private String cod_articulo;
     
     public control_existencias()
     {
         sen = new Sentencias_sql();
     }
     
     public boolean existe_cliente( String cod)
     {
         
        this.Documento = cod;
        return sen.existencias(cod, " from cliente where Rut_Cliente='"+cod+"';");
      
    }
     public boolean existe_proveedor( String id_prov)
     {
        this.No_documento = id_prov;
        return sen.existencias(id_prov, " from proveedor where rut_proveedor='"+id_prov+"';");
     
     }
     public boolean existe_articulo( String idart)
     {
        this.cod_articulo = idart;
        return sen.existencias(idart, " from articulo where articulo.cod_articulo='"+idart+"';");

}
     public String ingresa_nombre_Cliente()
     { 
       String result;
       result = sen.datos_string("nombres", "select nombres from cliente where Rut_Cliente='"+this.Documento+"';");
       return result;
    }
     public String ingresa_apellidos_Cliente()
     { 
       String resultado;
       resultado = sen.datos_string("apellidos", "select apellidos from cliente where Rut_Cliente='"+this.Documento+"';");
       return resultado;
    }
     public String GenerarNumeroFactura()
     {
        String codigo = "FACTURA-";
        for(int i=1; i<=6;i++){
           int num = (int)((Math.random()*(5))+6);
           codigo = codigo  +  num;
        }
        numero_factura = codigo;
        return codigo;
    }
     public void registrar_factura(String cod_factura, String nom_vendedor, String fecha_facturacion, String cod_formapago)
     {
        String[] datos = {cod_factura, Documento, nom_vendedor,fecha_facturacion,cod_formapago};
        sen.insertar(datos, "insert into factura(cod_factura,rut_cliente,nom_vendedor,fecha_factura, cod_formapago) values(?,?,?,?,?);");
    }
     
      public boolean update_factura(String factura, String subtotal, String iva)
      {
          String campos[] = {subtotal, iva,factura};           
          return sen.insertar(campos, "update factura set total_factura=?, IVA=? where cod_factura=?;");
      
      }
      
      public boolean update_stock(String stock, String cod_articulo)
      {
          String campos[] = {stock,cod_articulo};           
          return sen.insertar(campos, "update articulo set stock=stock+? where cod_articulo=?;"); 
      }
  
     public Object[] combox(String tabla, String campo)
     {
        return sen.poblar_combox(tabla, campo, String.format("select %s from %s;", campo, tabla));
     }
     
     public Object[][] datos_articulo(String cod_articulo)
     {
        String[] columnas={"descripcion","precio_venta","stock"};
        Object[][] resultado = sen.GetTabla(columnas, "articulo", String.format("select articulo.descripcion, precio_venta, stock from articulo where cod_articulo='%s';", cod_articulo));
        return resultado;
      }
     
      public Object[][] tipo_art(String cod_tipo)
     {
        String[] columnas={"descripcion","cant_imp"};
        Object[][] resultado = sen.GetTabla(columnas, "tipo_articulo", String.format("select cod_tipo, tipo_articulo.descripcion, tipo_articulo.cant_imp from tipo_articulo where tipo_articulo.cod_tipo='%s';", cod_tipo));
        return resultado;
      }
       public Object[][] proveedores(String rut_proveedor)
     {
        String[] columnas={"Nombre_comercial"};
        Object[][] resultado = sen.GetTabla(columnas, "proveedor", String.format("select proveedor.rut_proveedor, proveedor.Nombre_comercial from proveedor where proveedor.rut_proveedor='%s';", rut_proveedor));
        return resultado;
      }
      
        public Object[][] ciudades(String cod_ciudad)
     {
        String[] columnas={"nombre_ciudad"};
        Object[][] resultado = sen.GetTabla(columnas, "ciudad", String.format("select cod_ciudad, nombre_ciudad from ciudad where cod_ciudad='%s';", cod_ciudad));
        return resultado;
      }
     public Object[][] datos_cliente(String id_cliente)
     {
        String[] columnas={"rut_Cliente","Nombres","Apellidos","Direccion","nombre_ciudad","Telefono"};
        Object[][] resultado = sen.GetTabla(columnas, "cliente", String.format("select * from cliente, ciudad where cliente.rut_cliente='%s';", id_cliente));
        return resultado;
      }
      public Object[][] datos_detallefactura(String numero_factura)
     {
        String[] columnas={"cod_factura","cod_articulo","articulo.descripcion","cantidad","subtotal"};
        Object[][] resultado = sen.GetTabla(columnas, String.format("detalle_factura where cod_factura='%s';", numero_factura), String.format("select * from detalle_factura,articulo where detalle_factura.cod_articulo = articulo.cod_articulo and cod_factura='%s';", numero_factura));
        return resultado;
      }
      
      public Object[][] consulta_factura(String id)
       {
        String[] columnas={"cod_factura","Nombres","Apellidos","Fecha_factura","total_factura"};
        Object[][] resultado;
         resultado = sen.GetTabla(columnas, "factura", String.format("select factura.cod_factura, cliente.Nombres,cliente.Apellidos ,factura.fecha_factura, factura.total_factura from cliente, factura where factura.rut_cliente=cliente.rut_cliente and cliente.rut_cliente='%s';", id));
        return resultado;
       }
       
        public boolean registrar_producto(String cod_factura,String cod_articulo,String cantidad, String subtotal)
        {
        String[] datos = {cod_factura,cod_articulo, cantidad,subtotal};
        
        String[] datosP = {cantidad, cod_articulo};
        if(sen.insertar(datosP, "update articulo set stock=stock-? where articulo.cod_articulo=?;"))
        {
            return sen.insertar(datos, "insert into detalle_factura(cod_factura,cod_articulo,cantidad,subtotal) values(?,?,?,?);");
        }
        else
        {
            return false;
        }
    }
        
        public Double total_factura(String numfact)
        {
        return sen.datos_totalfactura("subtotal", String.format("select round( sum( subtotal ) , 2 ) as subtotal from detalle_factura where cod_factura='%s';", numfact));
    }
        
   }